package br.com.locanet.dao.database.impl;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.PersistenceException;

import br.com.locanet.bean.impl.Pessoa;
import br.com.locanet.dao.GenericJPADAO;

public abstract class PessoaDAO<ENTITY extends Pessoa> extends GenericJPADAO<ENTITY> {
	

	@Override
	protected Object[] doPrepareQuery(StringBuffer query, ENTITY entity) {
		List<Object> values = new ArrayList<Object>();
		
		for (Object obj : super.doPrepareQuery(query, entity)){
			values.add(obj);
		}
		
		if (entity.getNome()!=null&&!entity.getNome().isEmpty()){
			query.append(" AND oEntidade.nome LIKE ? ");
			values.add("%"+entity.getNome()+"%");
		}
		if (entity.getLogin()!=null&&!entity.getLogin().isEmpty()){
			query.append(" AND oEntidade.login = ? ");
			values.add(entity.getLogin());
		}
		if (entity.getSenha()!=null&&!entity.getSenha().isEmpty()){
			query.append(" AND oEntidade.senha = ? ");
			values.add(entity.getSenha());
		}
		if (entity.getStatus()!=null){
			query.append(" AND oEntidade.status = ? ");
			values.add(entity.getStatus());
		}
		
		return values.toArray();
	}
	
	@Override
	protected ENTITY doMerge(ENTITY entity) throws PersistenceException {
		ENTITY oldEntity = findById(entity);
			
		if (entity.getNome()!=null)
			oldEntity.setNome(entity.getNome());
		if (entity.getLogin()!=null)
			oldEntity.setLogin(entity.getLogin());
		if (entity.getSenha()!=null)
			oldEntity.setSenha(entity.getSenha());
		if (entity.getStatus()!=null)
			oldEntity.setStatus(entity.getStatus());
			
		return oldEntity;
	}

}
